package cn.edu.gzhu.workOrderManagement.pojo.dto.workOrder;

import cn.edu.gzhu.workOrderManagement.constants.MessageConstant;
import cn.edu.gzhu.workOrderManagement.constants.RegexConstant;
import cn.edu.gzhu.workOrderManagement.constants.WorkOrderAlertLevelConstant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class WorkOrderCreateDto implements Serializable {

    /**
     * 工单请求者，用户输入
     */
    @NotBlank
    @Length( max = 32)
    private String requestUser;

    /**
     * 工单请求者的身份证，用户输入
     */
    @NotBlank
    @Pattern(regexp = RegexConstant.ID_CARD)
    private String requestIdCard;

    /**
     * 逻辑卡号，用户输入
     */
    @NotBlank
    @Length(max = 255)
    private String logicalCardNumber;

    /**
     * 工单类型，使用WorkOrderTypeConstant
     */
    @NotBlank
    @Pattern(regexp = RegexConstant.WORK_ORDER_TYPES)
    private String type;

    /**
     * 工单类别，用户输入
     */
    @NotBlank
   @Length(max =63)
    private String category;

    /**
     * 工单内容
     */
    @NotBlank
    @Length(max = 2047)
    private String content;

    /**
     * 工单预警级别，使用WorkOrderAlertLevelConstant
     */
    @NotNull
    @Min(value = WorkOrderAlertLevelConstant.LOW)
    @Max(value = WorkOrderAlertLevelConstant.CRITICAL)
    private Integer alertLevel;

    /**
     * 是否为监管投诉，用户输入
     */
    @NotNull
    private Boolean isRegulatoryComplaint;

    /**
     * 地区，用户输入
     */
    @NotBlank
    @Length(max = 127)
    private String region;

    /**
     * 经办人,用户输入
     */
    @NotBlank
    @Length(max = 31)
    private String handler;

    /**
     * 经理，用户输入
     */
    @NotBlank
    @Length(max = 31)
    private String manager;

    /**
     * 组别,用户输入
     */
    @NotBlank
    @Length(max = 31)
    private String teamCategory;

    /**
     * 组员，用户输入
     */
    @NotBlank
    @Length(max = 63)
    private String teamMember;

    /**
     * 委案批次,用户输入
     */
    @NotBlank
    @Length(max = 127)
    private String caseBatch;

    /**
     * 手别,用户输入
     */
    @NotBlank
    @Length(max = 31)
    private String manualType;

    /**
     * 处理者的用户名
     */
    @NotBlank
    private String targetUser;

    /**
     * 工单标题
     */
    @NotBlank
    @Length( max = 31)
    private String title;


    /**
     * 材料工单的材料
     */
    private List<String> material;

    /**
     * 目标处理机构
     */
    @NotBlank
    private String targetOrganization;

    /**
     * 工单预期完成时间
     */
    @NotNull
    @Future
    private LocalDateTime expectedEndTime;


}
